from apps.goods.models import GoodsChannel
from collections import OrderedDict

# 商品频道分类
def get_categories():
    # 拿到所有商品频道(37个)
    # 商品频道对象
    channels = GoodsChannel.objects.order_by('group_id', 'sequence')
    # 返回前端的数据是字典类型
    categories = OrderedDict()
    # 将频道分类,分为11个频道组
    for channel in channels:
        # print(type(channel))    <class 'apps.goods.models.GoodsChannel'>
        # print(channel)          手机
        #                通过字段名得到值
        group_id = channel.group_id
        # 判断当前频道对应的频道组是否已经存在
        if group_id not in categories:
            # 不存在，创建
        #        频道组[id]            值
            categories[group_id] = {'channels': [], 'sub_cats': []}

        # 当前频道的对应的顶级商品类别对象(一级分类）（在频道组显示的数据）
        #         通过外键属性名得到对象
        # 子表（有外键）查询父表
        cat1 = channel.category
        # print(cat1)           手机
        # print(type(cat1))     <class 'apps.goods.models.GoodsCategory'>
        # |       当前频道               |
        categories[group_id]['channels'].append({
            'id': cat1.id,  # 顶级商品类别的id
            'name': cat1.name,  # 顶级商品类别的name
            'url': channel.url  # 商品频道的url
        })
        # 此时还有categories[group_id]['sub_cats']需要数据填充
        # 即二级分类数据
        for cat2 in cat1.subs.all():
            # print(cat2)         手机通讯
            # print(type(cat2))   <class 'apps.goods.models.GoodsCategory'>
            # 新增  名字.属性 =空列表
            cat2.sub_cats = []
            # 二级找三级
            for cat3 in cat2.subs.all():
                cat2.sub_cats.append(cat3)
            categories[group_id]['sub_cats'].append(cat2)
    return categories
